package professor.aula07.com.fafica.fachada;
import java.util.ArrayList;

import aula07.com.fafica.cliente.CPFInvalidoException;
import aula07.com.fafica.cliente.Cliente;
import aula07.com.fafica.cliente.ClienteJaCadastradoException;
import aula07.com.fafica.cliente.ClienteNaoEncontradoException;
import aula07.com.fafica.cliente.ControladorCliente;
import aula07.com.fafica.cliente.IRepositorioCliente;
import aula07.com.fafica.cliente.RepositorioClienteArray;
import aula07.com.fafica.cliente.RepositorioClienteBDR;
import aula07.com.fafica.util.RepositorioException;

public class Fachada {
	private static Fachada instance = null;
	private IRepositorioCliente repositorioClienteArray;
	private IRepositorioCliente RepositorioClienteBDR;	
	
	private Fachada() {
		//this.repositorioContaArray 		= new RepositorioContaArray();
		//this.repositorioClienteArray 	= new RepositorioClienteArray();
		this.RepositorioClienteBDRMSQL = new RepositorioClienteBDR();
		this.RepositorioClienteBDRMySQL = new RepositorioClienteBDR();
		this.RepositorioClienteBDROracle = new RepositorioClienteBDR();
	}
	
	public static Fachada getInstance() {
		if (Fachada.instance == null) {
			Fachada.instance = new Fachada();
		}
		return Fachada.instance;
	}
	
	public void clienteCadastrar(Cliente cliente) 
			throws ClienteJaCadastradoException, 
			RepositorioException, 
			CPFInvalidoException {
		ControladorCliente controladorCliente = new ControladorCliente(this.RepositorioClienteBDR);
		controladorCliente.cadastrar(cliente);
	}
	
	public Cliente clienteProcurar(String cpf) throws RepositorioException, ClienteNaoEncontradoException, CPFInvalidoException {
		ControladorCliente controladorCliente = new ControladorCliente(this.RepositorioClienteBDR);
		return controladorCliente.procurar(cpf);
	}
	
	public void clienteAtualizar(Cliente cliente) throws RepositorioException, ClienteNaoEncontradoException, CPFInvalidoException {
		ControladorCliente controladorCliente = new ControladorCliente(this.RepositorioClienteBDR);
		controladorCliente.atualizar(cliente);
	}
	
	public void clienteRemover(String cpf) throws RepositorioException, ClienteNaoEncontradoException, CPFInvalidoException {
		ControladorCliente controladorCliente = new ControladorCliente(this.RepositorioClienteBDR);
		controladorCliente.remover(cpf);
	}
	
	public ArrayList<Cliente> clienteListar() throws RepositorioException {
		ControladorCliente controladorCliente = new ControladorCliente(this.RepositorioClienteBDR);
		return controladorCliente.listar();
	}
	
}
